package MySocket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Socket2HTTP {
    public static void main(String[] args) throws IOException {
        try(ServerSocket serverSocket = new ServerSocket(8086)){
            System.out.println("等待客户端连接");
            Socket socket = serverSocket.accept(); //等待客户端连接
            System.out.println("客户端已连接，客户端ip地址是" + socket.getInetAddress().getHostAddress());
//            InputStream inputStream = socket.getInputStream();  //接受浏览器发送过来的数据，放到输入流中inputStream
//            System.out.println("接收到客户端数据");
//            while(true){
//                int i = inputStream.read();
//                if (i == -1) break;
//                System.out.print((char) i);  //循环打印输入流中的数据,不是pringln，否则每个字符都换行
//            }
//            inputStream.close();
            //使用浏览器请求http://127.0.0.1:8086,可以看到在控制台把http请求头都打印出来了。

            //我们还可以模拟http服务器，给客户端返回数据，包括状态码和response body。但实验成功的前提是把console打印的客户端数据注释掉，不知道为什么。
            OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream()); //用OutputStreamWriter把socket.getOutputStream()封装起来
            writer.write("HTTP/1.1 200 Accepted\r\n");  //往socket.getOutputStream()写数据。先返回一个协议版本和状态码，后面必须换行
            writer.write("\r\n");  //留空一行
            writer.write("lbwnb!!!!\r\n");  //返回的body
            writer.flush();
            writer.close();
            socket.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
